package com.etoak.common.jwt;


import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;

import java.security.Key;
import java.util.Date;
import java.util.Map;

public class MyJwtUtil {

    public static final String KEY_STRING = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";

    /**
     * 签名密钥
     */
    public static final Key SING_KEY = Keys.hmacShaKeyFor(KEY_STRING.getBytes());

    public static final Long EXPIRE_TIME = 12 * 60 * 60 * 1000L;

    public static String create(Map<String, Object> claimsMap) {
        Date now = new Date();

        return Jwts.builder()
                .signWith(SING_KEY) // 根据生成的密钥进行签名
                .setClaims(claimsMap) // 添加到JWT主体的声明信息
                .setIssuedAt(now) // token 签发时间
                .setExpiration(new Date(now.getTime() + EXPIRE_TIME)) // token 过期时间
                .compact();
    }

    public static Map<String, Object> parse(String token) {
        return Jwts.parserBuilder()
                .setSigningKey(SING_KEY) // 验证JWT签名的密钥
                .build()
                .parseClaimsJws(token)// 解析给定的JWS（签名JWT）字符串，并验证签名。如果签名无效或令牌过期等，将抛出异常。
                .getBody(); // 获取对象
    }

}
